#include <iostream>
#include <new>
#include "horarios.h"
#include "docentes.h"

using namespace std;

/*
*	Constroi objeto vazio
*/
Docente::Docente () {

}

/*
*	Constroi objeto apartir dos dados carregados da base de dados da tabela docentes
* @args const char* argNusp Identificacao
* @args const char* argCh_pret Creditos pretendidos
* @args const char* argTempo Ano de ingresso
* @args const char* argRegime Regimento (RTP, RTC, RDIDP)
* @args const char* argTitulacao Titulacao (Titular, Doutor, Mestre)
*/
Docente::Docente (const char* argNusp, const char* argCh_pret, const char* argTempo, const char* argRegime, const char* argTitulacao, const char* argArea, const char* argCoord, int argNumPref) {
	int i;

	nusp =  argNusp;
	ch_pret = atoi(argCh_pret);
	ch_acum = 0;
	area= atoi(argArea);
	tempo = 2008 - atoi(argTempo);

	if(!atoi(argCoord))
		coord=0;
	else
		coord=1;

	if(strcmp(argRegime,"RTP")==0)
		regime= 0;
	else if(strcmp(argRegime,"RTC")==0)
		regime= 1;
	else if(strcmp(argRegime,"RDIDP")==0)
		regime= 2;

	if(strcmp(argTitulacao,"Titular")==0)
		titulacao= 0;
	else if(strcmp(argTitulacao,"Doutor")==0)
		titulacao= 1;
	else if(strcmp(argTitulacao,"Mestre")==0)
		titulacao= 2;

	numPref= argNumPref;
	pref= (int*) calloc(argNumPref, sizeof(int));

	//Iniciando o vetor de preferencias
	for(i=0; i<numPref; i++)
		pref[i]=0;

}

/*
* Imprime os dados do professor
*/
void Docente::print() {
	int i;

	cout << "----------------------\n" \
	     << "Nusp\t:" << nusp \
       << "\nCH\t:" << ch_pret \
       << "\nTempo\t:" << tempo \
       << "\nRegime\t:" << regime \
       << "\nTitu...\t:" << titulacao \
       << "\nArea\t:" << area \
       << "\nCoor...\t:" << coord;

	// Imprime as preferencias do professor
	cout << "\nPref\t:";
	for(i=0; i< numPref; i++){
		if(pref[i]!=0 && pref[i]!=-1){
			cout << "("<< i <<")= " << pref[i] << "; ";
		}
	}

	// Imprime os conflitos do professor (restricoes)
	cout << "\nConf...\t:";
	for(i=0; i< numPref; i++){
		if(pref[i]!=0 && pref[i]==-1){
			cout << "("<< i <<") ";
		}
	}

	// Imprime as restricoes do professor
	cout<< "\nRest...\t:";
	restricao.print();
}

/********************************************************************************************/

ArrayDocentes::ArrayDocentes (){
	numDocentes= 0;
	docentes = NULL;
}

ArrayDocentes::ArrayDocentes (int num){
	numDocentes= 0;
	docentes = new Docente[num];
}

void ArrayDocentes::add(Docente d){
	docentes[numDocentes++]= d;
}

Docente ArrayDocentes::get(string nusp){
	int i;

	for (i=0; i<numDocentes; i++){
		if (docentes[i].nusp == nusp)
			return docentes[i];
	}
}


void ArrayDocentes::print(){
	int i;

	cout << "INFORMACOES DOS DOCENTES:\n" << endl;

	for(i=0; i< numDocentes; i++)
		docentes[i].print();

	cout << "----------------------\n" << endl;
}
